5 import java
.awt
.event
.KeyEvent
;
6 import java
.awt
.event
.KeyListener
;
7 import java
.awt
.event
.MouseEvent
;
8 import java
.awt
.event
.MouseListener
;
9 import java
.awt
.event
.MouseMotionListener
;
11 import models
.GraphModel
;
12 import models
.GraphVertex
;
15 import controllers
.actions
.Rename
;
17 import java
.util
.List
;
18 import java
.util
.ArrayList
;
21 public class SelectionController
implements MouseListener
,MouseMotionListener
,KeyListener
{
22 private GraphPanel object
= null;
23 private GraphFrame frame
;
24 private GraphVertex selectedObject
= null;
25 private GraphModel model
;
27 private String typedStr
;
28 private String originalName
;
29 private boolean isChangingName
;
37 public SelectionController(GraphFrame frame
, GraphModel model
){
38 isChangingName
= false;
40 frame
.setSelectionController(this);
41 frame
.addKeyListener(this);
42 setObject(frame
.getPanel());
47 public GraphModel
getModel() {
50 public void setSelected(GraphVertex o
)
55 if(selectedObject
!= null){
56 selectedObject
.setSelected(false);
63 public GraphVertex
getSelectedVertex()
65 return selectedObject
;
68 public void removeSelected()
70 selectedObject
= null;
74 public void setObject(GraphPanel panel
){
76 object
.removeMouseListener(this);
77 object
.removeMouseMotionListener(this);
78 object
.removeKeyListener(this);
81 object
.addMouseListener(this);
82 object
.addMouseMotionListener(this);
83 object
.addKeyListener(this);
86 public void setModel(GraphModel model
){
92 // Called when the typing stops, Either Return has been pressed or a
93 // other object has been selected.
94 private void doChangeName(){
95 selectedObject
.setName(originalName
);
96 this.frame
.addAction(new Rename(typedStr
,this));
97 this.isChangingName
= false;
100 private void doCancelNameChange(){
101 selectedObject
.setName(this.originalName
);
102 isChangingName
= false;
105 public void mouseClicked(MouseEvent arg0
) {
106 if(arg0
.getButton() == MouseEvent
.BUTTON1
){
107 if(arg0
.getClickCount() == 2){
109 isChangingName
= true;
110 originalName
= selectedObject
.getName();
111 System
.out
.println("DCLICK");
113 this.setSelected(model
.getGraphByCoordinate(arg0
.getX(), arg0
.getY()));
118 public void mouseEntered(MouseEvent arg0
) {
119 // TODO Auto-generated method stub
122 public void mouseExited(MouseEvent arg0
) {
123 // TODO Auto-generated method stub
126 public void mousePressed(MouseEvent arg0
) {
127 this.setSelected(model
.getGraphByCoordinate(arg0
.getX(), arg0
.getY()));
129 clickX
= arg0
.getX();
130 clickY
= arg0
.getY();
133 public void mouseReleased(MouseEvent arg0
) {
138 public void mouseDragged(MouseEvent arg0
) {
139 if(selectedObject
!= null){
140 selectedObject
.setX(selectedObject
.getX() + (arg0
.getX() - clickX
));
141 selectedObject
.setY(selectedObject
.getY() + (arg0
.getY() - clickY
));
142 clickX
= arg0
.getX();
143 clickY
= arg0
.getY();
148 public void mouseMoved(MouseEvent arg0
) {
152 public void keyPressed(KeyEvent arg0
) {
153 if(this.isChangingName
&& selectedObject
!= null){
154 if(arg0
.getKeyCode() == KeyEvent
.VK_ENTER
){
156 }else if(arg0
.getKeyCode() == KeyEvent
.VK_ESCAPE
){
157 doCancelNameChange();
158 }else if(arg0
.getKeyCode()== KeyEvent
.VK_BACK_SPACE
){
159 this.typedStr
= this.typedStr
.substring(0,this.typedStr
.length()-1);
160 selectedObject
.setName(typedStr
);
166 public void keyReleased(KeyEvent arg0
) {
170 private boolean acceptKeyForName(char a
){
171 String l
= new String();
173 String acceptKeys
= "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~!@#$%^&*()_+=-`[]{};'\":<>?,./\\| «①∞⁵‰‽fl○";
174 return acceptKeys
.contains(l
);
178 public void keyTyped(KeyEvent arg0
) {
179 // Todo Fix VK_ENTER + VK_ESCAPE
180 if(this.isChangingName
&& selectedObject
!= null && !arg0
.isActionKey()){
181 if(arg0
.getKeyChar() != KeyEvent
.CHAR_UNDEFINED
&& acceptKeyForName(arg0
.getKeyChar())){
182 this.typedStr
+= arg0
.getKeyChar();
183 System
.out
.println("Adding key");
184 selectedObject
.setName(typedStr
); //SetName for PREVIEW reasons!